home *** CD-ROM | disk | FTP | other *** search
Java Source | 2000-09-28 | 4.5 KB | 166 lines |
- /*
- * QuickTime for Java SDK Sample Code
-
- Usage subject to restrictions in SDK License Agreement
- * Copyright: © 1996-1999 Apple Computer, Inc.
-
- */
- package cdf;
-
- import java.awt.*;
- import java.awt.event.*;
- import java.io.*;
- import quicktime.app.*;
- import quicktime.app.anim.*;
- import quicktime.app.actions.BounceAction;
- import quicktime.app.actions.NextImageAction;
- import quicktime.app.actions.SimpleActionList;
- import quicktime.app.display.*;
- import quicktime.app.image.*;
- import quicktime.std.image.*;
- import quicktime.*;
- import quicktime.qd.*;
-
-
-
- public class CaptureDukeFrame {
- public QTCanvas canv;
- ImageDataSequence ids;
- QTImageDrawer qid;
- MultipleImagePainter dd;
- //public DukeAnim da;
- int width;
- private Frame showAfter;
- private Frame addTo;
- private Button b;
-
- //from duke anim
- private TwoDSprite sprite;
- // private ImageDataSequence images;
-
- private NextImageAction ni;
- private BounceAction ba;
- private SimpleActionList al;
- private Compositor comp;
-
- public CaptureDukeFrame (Frame f, String title, int w) {
-
- addTo = f;
- width = w;
- canv = new QTCanvas(QTCanvas.kInitialSize, 0.5F, 0.5F);
- addTo.add("Center", canv);
-
-
- addTo.addNotify();
- b = new Button ("QT Capture");
- b.addActionListener (new ActionListener() {
- public void actionPerformed (ActionEvent ae) {
- try {
- dd.setCurrentFrame(0);
- qid.redraw(null);
- ImagePresenter id = qid.toImagePresenter();
- ImageDescription desc = id.getDescription();
- ids = new ImageDataSequence (desc);
- ids.append (id.getImage());
-
- for (int i = 1; i < dd.getNumberOfFrames(); i++) {
- dd.setCurrentFrame(i);
- qid.redraw(null);
- id = qid.toImagePresenter();
- ids.append (id.getImage());
- }
- dd.setCurrentFrame(0);
- //da = new DukeAnim (ids, new Dimension (width, 80), QDColor.white);
- if (ids == null) {
- QTSession.close();
- System.exit(0);
- }
- canv.removeClient();
- disableButton();
-
- //create compositor
- comp = new Compositor (new QDGraphics (new QDRect(new Dimension (width, 80))), QDColor.white, 35, 1);
- al = new SimpleActionList();
- Matrix matrix1 = new Matrix();
- matrix1.setTx(20);
- matrix1.setTy(0);
- //sprite.setMatrix (matrix1);
- sprite = new TwoDSprite(ids, 1, matrix1, true, 1);
-
- ImageSequencer seq = new ImageSequencer (ids);
- seq.setLooping (ImageSequencer.kLoopPalindrome);
- ni = new NextImageAction (10, 1, seq, sprite);
- al.addMember(ni);
- //ba = new BounceAction (1, 0, comp, 35, 1, sprite);
- ba = new BounceAction (10, 0, comp, sprite, 1.0F, 0);
- al.addMember(ba);
- comp.addController(al);
- comp.addMember(sprite);
- // getTimer().setTicklish(al);
- comp.getTimer().setRate(1);
- canv.setClient (comp, true);
-
- //canv.setClient (da, true);
- } catch (QTException e) {
- e.printStackTrace();
- }
- }
- });
-
- addTo.add ("South", b);
- }
-
- private void disableButton() {
- b.setEnabled(false);
- }
-
-
- public void showDuke() {
- try {
- File file = QTFactory.findAbsolutePath ("duke");
- Image[] images = getImages (file.getAbsolutePath(), 17);
- int width = images[0].getWidth(addTo);
- int height = images[0].getHeight(addTo);
-
- dd = new MultipleImagePainter(images);
- qid = new QTImageDrawer (dd, new Dimension (width, height), Redrawable.kMultiFrame);
- qid.setRedrawing(true);
-
- canv.setClient (qid, true);
- } catch (Exception ex) {
- ex.printStackTrace();
- QTSession.close();
- }
- }
-
-
- Image[] getImages (String dir, int nimgs) throws Exception {
- MediaTracker tracker = new MediaTracker (addTo);
-
- File fDir = new File(dir);
- if (fDir.isDirectory() == false)
- throw new FileNotFoundException (dir);
- if (dir.charAt (dir.length() - 1) != File.separatorChar)
- dir += File.separatorChar;
-
- // import gif images
- Image[] images = new Image[nimgs];
- for (int i=0; i < nimgs; i++) {
- images[i] = Toolkit.getDefaultToolkit().getImage(dir + "T" + i + ".gif");
- tracker.addImage(images[i], i);
- }
-
- // wait for them all to finish importing
- try { tracker.waitForAll(); }
- catch (InterruptedException e) { }
-
- if (tracker.isErrorAny()) throw new Exception ("Error in Media Tracker");
-
- // make sure images are prepared so the draw properly
- for (int i = 0; i < nimgs; i++)
- addTo.prepareImage (images[i], addTo);
-
- return images;
- }
- }
-